package com.xdb.sqlparser.dialect.mysql.ast.statement;

import java.util.ArrayList;
import java.util.List;

import com.xdb.sqlparser.ast.SQLExpr;
import com.xdb.sqlparser.ast.SQLName;
import com.xdb.sqlparser.ast.expr.SQLQueryExpr;
import com.xdb.sqlparser.ast.statement.SQLExprTableSource;
import com.xdb.sqlparser.ast.statement.SQLInsertStatement.ValuesClause;
import com.xdb.sqlparser.dialect.mysql.visitor.MySqlASTVisitor;

public class MySqlReplaceStatement extends MySqlStatementImpl {

	private boolean lowPriority = false;
	private boolean delayed = false;

	private SQLExprTableSource tableSource;
	private final List<SQLExpr> columns = new ArrayList<SQLExpr>();
	private List<ValuesClause> valuesList = new ArrayList<ValuesClause>();
	private SQLQueryExpr query;

	public SQLName getTableName() {
		if (tableSource == null) {
			return null;
		}

		return (SQLName) tableSource.getExpr();
	}

	public void setTableName(SQLName tableName) {
		this.setTableSource(new SQLExprTableSource(tableName));
	}

	public SQLExprTableSource getTableSource() {
		return tableSource;
	}

	public void setTableSource(SQLExprTableSource tableSource) {
		if (tableSource != null) {
			tableSource.setParent(this);
		}
		this.tableSource = tableSource;
	}

	public List<SQLExpr> getColumns() {
		return columns;
	}

	public boolean isLowPriority() {
		return lowPriority;
	}

	public void setLowPriority(boolean lowPriority) {
		this.lowPriority = lowPriority;
	}

	public boolean isDelayed() {
		return delayed;
	}

	public void setDelayed(boolean delayed) {
		this.delayed = delayed;
	}

	public SQLQueryExpr getQuery() {
		return query;
	}

	public void setQuery(SQLQueryExpr query) {
		query.setParent(this);
		this.query = query;
	}

	public List<ValuesClause> getValuesList() {
		return valuesList;
	}

	public void accept0(MySqlASTVisitor visitor) {
		if (visitor.visit(this)) {
			acceptChild(visitor, tableSource);
			acceptChild(visitor, columns);
			acceptChild(visitor, valuesList);
			acceptChild(visitor, query);
		}
		visitor.endVisit(this);
	}
}
